package br.com.util;

import java.util.ArrayList;
import java.util.List;

import br.com.logistica.persistence.entidades.Conhecimento;
import br.com.logistica.persistence.entidades.ItensNota;
import br.com.logistica.vo.Cliente;
import br.com.logistica.vo.Endereco;
import br.com.logistica.vo.Historico;
import br.com.logistica.vo.NotaFiscal;
import br.com.logistica.vo.Transportadora;

public class BeanUtil {

	// -------------------------------------------[CastEndereco]--------------------------
	public static Endereco castEnderecoPersistenceParaEnderecoVO(
			br.com.logistica.persistence.entidades.Endereco endereco) {

		Endereco enderecoVO = new Endereco();

		enderecoVO.setBairro(endereco.getBairro());
		enderecoVO.setCep((endereco.getCep()));
		enderecoVO.setLogradouro(endereco.getLogradouro());
		enderecoVO.setIdEndereco(endereco.getIdEndereco());
		enderecoVO.setPais(endereco.getPais());
		enderecoVO.setNumero(endereco.getNumero());
		enderecoVO.setUf(endereco.getUf());
		enderecoVO.setMunicipio(endereco.getMunicipio());

		return enderecoVO;

	}

	public static br.com.logistica.persistence.entidades.Endereco castEnderecoVOParaEnderecoPersistence(
			Endereco endereco) {

		br.com.logistica.persistence.entidades.Endereco enderecoPersistence = new br.com.logistica.persistence.entidades.Endereco();

		enderecoPersistence.setBairro(endereco.getBairro());
		enderecoPersistence.setCep((endereco.getCep()));
		enderecoPersistence.setLogradouro(endereco.getLogradouro());
		enderecoPersistence.setIdEndereco(endereco.getIdEndereco());
		enderecoPersistence.setPais(endereco.getPais());
		enderecoPersistence.setNumero(endereco.getNumero());
		enderecoPersistence.setUf(endereco.getUf());
		enderecoPersistence.setMunicipio(endereco.getMunicipio());

		return enderecoPersistence;

	}

	// -------------------------------------------[CastCliente]--------------------------
	public static Cliente castClientePersistenceparaClienteVO(
			br.com.logistica.persistence.entidades.Cliente clientePersistence)
			throws Exception {

		Cliente cliente = new Cliente();

		cliente.setCnpj(clientePersistence.getCnpj());
		cliente.setIdCliente(clientePersistence.getIdCliente());
		cliente.setNome(clientePersistence.getNome());
		cliente.setInscricaoEstadual(clientePersistence.getInscricaoEstadual());
		return cliente;

	}

	public static br.com.logistica.persistence.entidades.Cliente castClienteVOClientePersistencepara(
			Cliente cliente) throws Exception {

		br.com.logistica.persistence.entidades.Cliente clientepersistencia = new br.com.logistica.persistence.entidades.Cliente();

		clientepersistencia.setCnpj(cliente.getCnpj());
		clientepersistencia.setIdCliente(cliente.getIdCliente());
		clientepersistencia.setNome(cliente.getNome());
		clientepersistencia.setInscricaoEstadual(cliente.getInscricaoEstadual());

		return clientepersistencia;

	}

	// /==================================[historico]====================================================
	public static br.com.logistica.persistence.entidades.Historico castHistoricoVOClientePersistencepara(
			Historico historico) throws Exception {

		br.com.logistica.persistence.entidades.Historico historicoPersistencia = new br.com.logistica.persistence.entidades.Historico();

		historicoPersistencia.setDataHistorico(historico.getDataHistorico());
		historicoPersistencia.setDescricao(historico.getDescricao());
		historicoPersistencia.setIdHistorico(Integer.parseInt(String
				.valueOf(historico.getIdHistorico())));

		historicoPersistencia
				.setEndereco(castEnderecoVOParaEnderecoPersistence(historico
						.getEndereco()));

		historicoPersistencia.setNomeMotorista(historico.getNomeMotorista());
		historicoPersistencia.setPlaca(historico.getPlaca());

		return historicoPersistencia;

	}

	public static Historico casthistoricoPersistenceparacastHistoricoVO(
			br.com.logistica.persistence.entidades.Historico historico)
			throws Exception {

		Historico historicoPersistencia = new Historico();

		historicoPersistencia.setDataHistorico(historico.getDataHistorico());
		historicoPersistencia.setDescricao(historico.getDescricao());
		historicoPersistencia.setIdHistorico(Integer.parseInt(String
				.valueOf(historico.getIdHistorico())));

		historicoPersistencia
				.setEndereco(castEnderecoPersistenceParaEnderecoVO(historico
						.getEndereco()));

		historicoPersistencia.setNomeMotorista(historico.getNomeMotorista());
		historicoPersistencia.setPlaca(historico.getPlaca());

		return historicoPersistencia;

	}

	// ================================[CastNF]================================================

	public static br.com.logistica.persistence.entidades.NotaFiscal castNotaFiscalVoNotaFiscalPersistence(
			NotaFiscal fiscal) throws Exception {

		br.com.logistica.persistence.entidades.NotaFiscal notaFiscalpersistence = new br.com.logistica.persistence.entidades.NotaFiscal();

		// notaFiscalpersistence.setConhecimento(conhecimento);
		// notaFiscalpersistence.setTransportadora(transportadora);

		notaFiscalpersistence
				.setDestinatario(castClienteVOClientePersistencepara(fiscal
						.getDestinatario()));
		notaFiscalpersistence.setDtEmissao(fiscal.getDtEmissao());
		notaFiscalpersistence.setDtSaida(fiscal.getDtSaida());
		notaFiscalpersistence
				.setEmitente(castClienteVOClientePersistencepara(fiscal
						.getEmitente()));
		notaFiscalpersistence.setEsp(fiscal.getEsp());
		notaFiscalpersistence
				.setHistorico(castHistoricoVOClientePersistencepara(fiscal
						.getHistorico()));
		notaFiscalpersistence.setIdNotaFiscal(fiscal.getIdNotaFiscal());

		notaFiscalpersistence.setNumeroNota(fiscal.getnNF());
		notaFiscalpersistence.setNumeroSerie(fiscal.getNumeroSerie());
		notaFiscalpersistence.setPesoBruto(fiscal.getPesoBruto());
		notaFiscalpersistence.setPesoLiq(fiscal.getPesoLiq());
		notaFiscalpersistence.setStatus(fiscal.getEnumStatusNota());
		notaFiscalpersistence.setVlrTotal(fiscal.getValorTotal());
		notaFiscalpersistence.setItensNotas(castItensdaNota(fiscal));
		return notaFiscalpersistence;

	}

	public static NotaFiscal castNotaFiscalPersistenceNotaFiscalVo(
			br.com.logistica.persistence.entidades.NotaFiscal fiscal)
			throws Exception {

		NotaFiscal notaFiscal = new NotaFiscal();

		notaFiscal.setDestinatario(castClientePersistenceparaClienteVO(fiscal
				.getDestinatario()));
		notaFiscal.setDtEmissao(fiscal.getDtEmissao());
		notaFiscal.setDtSaida(fiscal.getDtSaida());
		notaFiscal.setEmitente(castClientePersistenceparaClienteVO(fiscal
				.getEmitente()));
		notaFiscal.setEnumStatusNota(fiscal.getStatus());
		notaFiscal.setEsp(fiscal.getEsp());
		// notaFiscal.setHistorico(historico)
		notaFiscal.setIdNotaFiscal(fiscal.getIdNotaFiscal());
		notaFiscal.setnNF(fiscal.getNumeroNota());
		notaFiscal.setNumeroSerie(fiscal.getNumeroSerie());
		notaFiscal.setPesoBruto(fiscal.getPesoBruto());
		notaFiscal.setPesoLiq(fiscal.getPesoLiq());

		// notaFiscal.setProdutos(produtos)
		// notaFiscal.setQtdProduto()
		notaFiscal.setQtdVol(fiscal.getQtdVol());
		// notaFiscal.setTransportadora(transportadora)
		notaFiscal.setValorTotal(fiscal.getVlrTotal());

		return notaFiscal;

	}

	private static List<ItensNota> castItensdaNota(NotaFiscal fiscal) {

		List<ItensNota> itensNota = new ArrayList<ItensNota>();

		for (int i = 0; i < fiscal.getProdutos().size(); i++) {

			ItensNota iNot = new ItensNota();

			iNot.setProduto(castProdutoVOProdutoPersistence(fiscal
					.getProdutos().get(i)));

			iNot.setQtd(fiscal.getProdutos().get(i).getQtdProduto());
			iNot.setSubTotal(fiscal.getProdutos().get(i).getValorUnitario()
					* fiscal.getProdutos().get(i).getQtdProduto());

			itensNota.add(iNot);

		}

		return itensNota;
	}

	public static br.com.logistica.persistence.entidades.Produto castProdutoVOProdutoPersistence(br.com.logistica.vo.Produto produto) {
		br.com.logistica.persistence.entidades.Produto prodPer=new br.com.logistica.persistence.entidades.Produto();
		prodPer.setCfop(produto.getCfop());
		prodPer.setCodProdutos(produto.getCodProdutos());
		prodPer.setDescricao(produto.getDescricao());
		prodPer.setIdProduto(produto.getIdProduto());
		prodPer.setUncom(produto.getUnCom());
		prodPer.setValorUnitario(produto.getValorUnitario());
		return prodPer;
	}

	public static br.com.logistica.persistence.entidades.Conhecimento castConhecimentoVOConhecimentoPersistance(br.com.logistica.vo.Conhecimento conhecimento) {
		br.com.logistica.persistence.entidades.Conhecimento conhecimentoPersistance = new br.com.logistica.persistence.entidades.Conhecimento();
		conhecimentoPersistance.setDataSaida(conhecimento.getDataSaida());
		conhecimentoPersistance.setIdConhecimento(conhecimento.getIdconhecimento());
		conhecimentoPersistance.setMotorista(conhecimento.getMotorista());
		conhecimentoPersistance.setNotaFiscals(null);
		conhecimentoPersistance.setPlaca(conhecimento.getPlaca());
		conhecimentoPersistance.setTransportadora(castTransportadoraVOParaPersistence(conhecimento.getTransportadora()));
		return conhecimentoPersistance;
	}
	
	public static br.com.logistica.vo.Conhecimento castConhecimentoPersistenceParaVO(br.com.logistica.persistence.entidades.Conhecimento conh){
		br.com.logistica.vo.Conhecimento conhecVO=new br.com.logistica.vo.Conhecimento();
		conhecVO.setDataSaida(conh.getDataSaida());
		conhecVO.setIdconhecimento(conh.getIdConhecimento());
		conhecVO.setMotorista(conh.getMotorista());
		conhecVO.setPlaca(conh.getPlaca());
		conhecVO.setNotaFiscals(null);
		conhecVO.setTransportadora(castTransportadoraPersistenceParaVO(conh.getTransportadora()));
		return conhecVO;
	}
	
	public static br.com.logistica.vo.Transportadora castTransportadoraPersistenceParaVO(br.com.logistica.persistence.entidades.Transportadora trans){
		br.com.logistica.vo.Transportadora tr=new br.com.logistica.vo.Transportadora();
		tr.setCnpj(trans.getCnpj());
		tr.setNome(trans.getNome());
		tr.setUf(trans.getUf());
		tr.setMunicipio(trans.getMunicipio());
		tr.setIdTransportadora(trans.getIdTransportadora());
		ArrayList<NotaFiscal> nfvo=new ArrayList<NotaFiscal>();
		ArrayList<Historico> hist=new ArrayList<Historico>();
		try{
			for(br.com.logistica.persistence.entidades.NotaFiscal abc:trans.getNotaFiscals()){
				nfvo.add(castNotaFiscalPersistenceNotaFiscalVo(abc));
			}
			for(br.com.logistica.persistence.entidades.Historico his:trans.getHistoricos()){
				hist.add(casthistoricoPersistenceparacastHistoricoVO(his));
			}
			tr.setNotasFiscais(nfvo);
			tr.setHistoricos(hist);
		}
		catch(Exception err){
			err.printStackTrace();
		}
		return tr;
	}

	public static br.com.logistica.persistence.entidades.Transportadora castTransportadoraVOParaPersistence(Transportadora trans){
		br.com.logistica.persistence.entidades.Transportadora retorno=new br.com.logistica.persistence.entidades.Transportadora();
		retorno.setCnpj(trans.getCnpj());
		retorno.setMunicipio(trans.getMunicipio());
		retorno.setNome(trans.getNome());
		retorno.setUf(trans.getUf());
		retorno.setIdTransportadora(trans.getIdTransportadora());
		ArrayList<br.com.logistica.persistence.entidades.Historico> hist=new ArrayList<br.com.logistica.persistence.entidades.Historico>();
		ArrayList<br.com.logistica.persistence.entidades.NotaFiscal> nfet=new ArrayList<br.com.logistica.persistence.entidades.NotaFiscal>();
		try{
			for(Historico ht:trans.getHistoricos())
				hist.add(castHistoricoVOClientePersistencepara(ht));
			
			for(NotaFiscal nf:trans.getNotasFiscais())
				nfet.add(castNotaFiscalVoNotaFiscalPersistence(nf));
			
			retorno.setHistoricos(hist);
			retorno.setNotaFiscals(nfet);
		}
		catch(Exception err){
			err.printStackTrace();
		}
		return retorno;
	}
	
	public static void main(String[] args) throws Exception {

		NotaFiscal m = new NotaFiscal();
		m.setIdNotaFiscal(12);
		ArrayList<br.com.logistica.vo.Produto> listaP = new ArrayList<br.com.logistica.vo.Produto>();
		br.com.logistica.vo.Produto p = new br.com.logistica.vo.Produto();
		p.setIdProduto(1);
		p.setValorProduto(12);
		p.setValorUnitario(1212);
		p.setQtdProduto(3);
		p.setDescricao("teste1");

		br.com.logistica.vo.Produto p1 = new br.com.logistica.vo.Produto();
		p1.setIdProduto(2);
		p1.setValorProduto(24);
		p1.setValorUnitario(24);
		p1.setQtdProduto(4);
		p1.setDescricao("teste2");
		listaP.add(p1);
		listaP.add(p);
		m.setProdutos(listaP);

		Cliente cl = new Cliente();
		cl.setCnpj("wqewqe");
		cl.setIdCliente(12);
		m.setDestinatario(cl);
		m.setEmitente(cl);

		Endereco endereco = new Endereco();
		Historico historico = new Historico();
		historico.setEndereco(endereco);
		historico.setIdHistorico(12);
		m.setHistorico(historico);
		br.com.logistica.persistence.entidades.NotaFiscal pk = castNotaFiscalVoNotaFiscalPersistence(m);

		System.out.println();

	}
}
